home *** CD-ROM | disk | FTP | other *** search
/ Ultra Pack / UltraComputing Partner Applications.iso / SunLabs / tclTK / src / tk4.0 / tests / pack.test < prev    next >
Encoding:
Text File  |  1994-12-17  |  33.4 KB  |  926 lines

  1. # This file is a Tcl script to test out the "pack" command
  2. # of Tk.  It is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1993 The Regents of the University of California.
  5. # Copyright (c) 1994 Sun Microsystems, Inc.
  6. #
  7. # See the file "license.terms" for information on usage and redistribution
  8. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9. #
  10. # @(#) pack.test 1.21 94/12/17 15:54:35
  11.  
  12. if {[string compare test [info procs test]] == 1} then \
  13.   {source defs}
  14.  
  15. # Utility procedures:
  16.  
  17. proc pack1 {args} {
  18.     pack forget .pack.a .pack.b .pack.c .pack.d
  19.     eval pack .pack.a $args
  20.     pack .pack.b -expand yes -fill both
  21.     update
  22.     list [winfo geometry .pack.a] [winfo geometry .pack.b]
  23. }
  24. proc pack2 {args} {
  25.     pack forget .pack.a .pack.b .pack.c .pack.d
  26.     eval pack .pack.a $args
  27.     update
  28.     winfo geometry .pack.a
  29. }
  30. proc pack3 {args} {
  31.     pack forget .pack.a .pack.b .pack.c .pack.d
  32.     pack .pack.a -side  top
  33.     pack .pack.c -side left
  34.     eval pack .pack.b $args
  35.     update
  36.     winfo geometry .pack.b
  37. }
  38. proc pack4 {option value} {
  39.     pack forget .pack.a .pack.b .pack.c .pack.d
  40.     pack .pack.a $option $value
  41.     set i [pack info .pack.a]
  42.     lindex $i [expr [lsearch -exact $i $option]+1]
  43. }
  44.  
  45. # Create some test windows.
  46.  
  47. catch {destroy .pack}
  48. toplevel .pack
  49. wm geom .pack 300x200+0+0
  50. wm minsize .pack 1 1
  51. update idletasks
  52. foreach i {a b c d} {
  53.     frame .pack.$i
  54.     label .pack.$i.label -text $i -relief raised
  55.     place .pack.$i.label -relwidth 1.0 -relheight 1.0
  56. }
  57. .pack.a config -width 20 -height 40
  58. .pack.b config -width 50 -height 30
  59. .pack.c config -width 80 -height 80
  60. .pack.d config -width 40 -height 30
  61.  
  62. test pack-1.1 {-side option} {
  63.     pack1 -side top
  64. } {20x40+140+0 300x160+0+40}
  65. test pack-1.2 {-side option} {
  66.     pack1 -side bottom
  67. } {20x40+140+160 300x160+0+0}
  68. test pack-1.3 {-side option} {
  69.     pack1 -side left
  70. } {20x40+0+80 280x200+20+0}
  71. test pack-1.4 {-side option} {
  72.     pack1 -side right
  73. } {20x40+280+80 280x200+0+0}
  74.  
  75. test pack-2.1 {x padding and filling} {
  76.     pack1 -side right -padx 20
  77. } {20x40+260+80 240x200+0+0}
  78. test pack-2.2 {x padding and filling} {
  79.     pack1 -side right -ipadx 20
  80. } {60x40+240+80 240x200+0+0}
  81. test pack-2.3 {x padding and filling} {
  82.     pack1 -side right -ipadx 5 -padx 10
  83. } {30x40+260+80 250x200+0+0}
  84. test pack-2.4 {x padding and filling} {
  85.     pack1 -side right -padx 20 -fill x
  86. } {20x40+260+80 240x200+0+0}
  87. test pack-2.5 {x padding and filling} {
  88.     pack1 -side right -ipadx 20 -fill x
  89. } {60x40+240+80 240x200+0+0}
  90. test pack-2.6 {x padding and filling} {
  91.     pack1 -side right -ipadx 5 -padx 10 -fill x
  92. } {30x40+260+80 250x200+0+0}
  93. test pack-2.7 {x padding and filling} {
  94.     pack1 -side top -padx 20
  95. } {20x40+140+0 300x160+0+40}
  96. test pack-2.8 {x padding and filling} {
  97.     pack1 -side top -ipadx 20
  98. } {60x40+120+0 300x160+0+40}
  99. test pack-2.9 {x padding and filling} {
  100.     pack1 -side top -ipadx 5 -padx 10
  101. } {30x40+135+0 300x160+0+40}
  102. test pack-2.10 {x padding and filling} {
  103.     pack1 -side top -padx 20 -fill x
  104. } {260x40+20+0 300x160+0+40}
  105. test pack-2.11 {x padding and filling} {
  106.     pack1 -side top -ipadx 20 -fill x
  107. } {300x40+0+0 300x160+0+40}
  108. test pack-2.12 {x padding and filling} {
  109.     pack1 -side top -ipadx 5 -padx 10 -fill x
  110. } {280x40+10+0 300x160+0+40}
  111. set pad [winfo pixels .pack 1c]
  112. test pack-2.13 {x padding and filling} {
  113.     pack forget .pack.a .pack.b .pack.c .pack.d
  114.     pack .pack.a -padx 1c
  115.     set x [pack info .pack.a]
  116.     lindex $x [expr [lsearch -exact $x -padx]+1]
  117. } $pad
  118. test pack-2.14 {x padding and filling} {
  119.     pack forget .pack.a .pack.b .pack.c .pack.d
  120.     pack .pack.a -ipadx 1c
  121.     set x [pack info .pack.a]
  122.     lindex $x [expr [lsearch -exact $x -ipadx]+1]
  123. } $pad
  124.  
  125. test pack-3.1 {y padding and filling} {
  126.     pack1 -side right -pady 20
  127. } {20x40+280+80 280x200+0+0}
  128. test pack-3.2 {y padding and filling} {
  129.     pack1 -side right -ipady 20
  130. } {20x80+280+60 280x200+0+0}
  131. test pack-3.3 {y padding and filling} {
  132.     pack1 -side right -ipady 5 -pady 10
  133. } {20x50+280+75 280x200+0+0}
  134. test pack-3.4 {y padding and filling} {
  135.     pack1 -side right -pady 20 -fill y
  136. } {20x160+280+20 280x200+0+0}
  137. test pack-3.5 {y padding and filling} {
  138.     pack1 -side right -ipady 20 -fill y
  139. } {20x200+280+0 280x200+0+0}
  140. test pack-3.6 {y padding and filling} {
  141.     pack1 -side right -ipady 5 -pady 10 -fill y
  142. } {20x180+280+10 280x200+0+0}
  143. test pack-3.7 {y padding and filling} {
  144.     pack1 -side top -pady 20
  145. } {20x40+140+20 300x120+0+80}
  146. test pack-3.8 {y padding and filling} {
  147.     pack1 -side top -ipady 20
  148. } {20x80+140+0 300x120+0+80}
  149. test pack-3.9 {y padding and filling} {
  150.     pack1 -side top -ipady 5 -pady 10
  151. } {20x50+140+10 300x130+0+70}
  152. test pack-3.10 {y padding and filling} {
  153.     pack1 -side top -pady 20 -fill y
  154. } {20x40+140+20 300x120+0+80}
  155. test pack-3.11 {y padding and filling} {
  156.     pack1 -side top -ipady 20 -fill y
  157. } {20x80+140+0 300x120+0+80}
  158. test pack-3.12 {y padding and filling} {
  159.     pack1 -side top -ipady 5 -pady 10 -fill y
  160. } {20x50+140+10 300x130+0+70}
  161. set pad [winfo pixels .pack 1c]
  162. test pack-3.13 {y padding and filling} {
  163.     pack forget .pack.a .pack.b .pack.c .pack.d
  164.     pack .pack.a -pady 1c
  165.     set x [pack info .pack.a]
  166.     lindex $x [expr [lsearch -exact $x -pady]+1]
  167. } $pad
  168. test pack-3.14 {y padding and filling} {
  169.     pack forget .pack.a .pack.b .pack.c .pack.d
  170.     pack .pack.a -ipady 1c
  171.     set x [pack info .pack.a]
  172.     lindex $x [expr [lsearch -exact $x -ipady]+1]
  173. } $pad
  174.  
  175. test pack-4.1 {anchors} {
  176.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
  177. } {30x70+135+20}
  178. test pack-4.2 {anchors} {
  179.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
  180. } {30x70+260+20}
  181. test pack-4.3 {anchors} {
  182.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
  183. } {30x70+260+65}
  184. test pack-4.4 {anchors} {
  185.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
  186. } {30x70+260+110}
  187. test pack-4.5 {anchors} {
  188.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
  189. } {30x70+135+110}
  190. test pack-4.6 {anchors} {
  191.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
  192. } {30x70+10+110}
  193. test pack-4.7 {anchors} {
  194.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
  195. } {30x70+10+65}
  196. test pack-4.8 {anchors} {
  197.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
  198. } {30x70+10+20}
  199. test pack-4.9 {anchors} {
  200.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
  201. } {30x70+135+65}
  202.  
  203. # Repeat above tests, but with a frame that isn't at (0,0), so that
  204. # we can be sure that the frame offset is being added in correctly.
  205.  
  206. test pack-5.1 {more anchors} {
  207.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
  208. } {60x60+160+60}
  209. test pack-5.2 {more anchors} {
  210.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
  211. } {60x60+230+60}
  212. test pack-5.3 {more anchors} {
  213.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
  214. } {60x60+230+90}
  215. test pack-5.4 {more anchors} {
  216.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
  217. } {60x60+230+120}
  218. test pack-5.5 {more anchors} {
  219.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
  220. } {60x60+160+120}
  221. test pack-5.6 {more anchors} {
  222.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
  223. } {60x60+90+120}
  224. test pack-5.7 {more anchors} {
  225.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
  226. } {60x60+90+90}
  227. test pack-5.8 {more anchors} {
  228.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
  229. } {60x60+90+60}
  230. test pack-5.9 {more anchors} {
  231.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
  232. } {60x60+160+90}
  233.  
  234. test pack-6.1 {-expand option} {
  235.     pack forget .pack.a .pack.b .pack.c .pack.d
  236.     pack .pack.a .pack.b .pack.c .pack.d -side left
  237.     update
  238.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  239.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  240. } {20x40+0+80 50x30+20+85 80x80+70+60 40x30+150+85}
  241. test pack-6.2 {-expand option} {
  242.     pack forget .pack.a .pack.b .pack.c .pack.d
  243.     pack .pack.a -side left -expand yes
  244.     pack .pack.b -side left
  245.     pack .pack.c .pack.d -side left -expand 1
  246.     update
  247.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  248.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  249. } {20x40+18+80 50x30+56+85 80x80+124+60 40x30+241+85}
  250. test pack-6.3 {-expand option} {
  251.     pack forget .pack.a .pack.b .pack.c .pack.d
  252.     pack .pack.a .pack.b .pack.c .pack.d -side top
  253.     update
  254.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  255.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  256. } {20x40+140+0 50x30+125+40 80x80+110+70 40x30+130+150}
  257. test pack-6.4 {-expand option} {
  258.     pack forget .pack.a .pack.b .pack.c .pack.d
  259.     pack .pack.a -side top -expand yes
  260.     pack .pack.b -side top
  261.     pack .pack.c .pack.d -side top -expand 1
  262.     update
  263.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  264.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  265. } {20x40+140+3 50x30+125+46 80x80+110+79 40x30+130+166}
  266. test pack-6.5 {-expand option} {
  267.     pack forget .pack.a .pack.b .pack.c .pack.d
  268.     pack .pack.a .pack.b .pack.c .pack.d -side right
  269.     update
  270.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  271.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  272. } {20x40+280+80 50x30+230+85 80x80+150+60 40x30+110+85}
  273. test pack-6.6 {-expand option} {
  274.     pack forget .pack.a .pack.b .pack.c .pack.d
  275.     pack .pack.a -side right -expand yes
  276.     pack .pack.b -side right
  277.     pack .pack.c .pack.d -side right -expand 1
  278.     update
  279.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  280.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  281. } {20x40+262+80 50x30+194+85 80x80+95+60 40x30+18+85}
  282. test pack-6.7 {-expand option} {
  283.     pack forget .pack.a .pack.b .pack.c .pack.d
  284.     pack .pack.a .pack.b .pack.c .pack.d -side bottom
  285.     update
  286.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  287.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  288. } {20x40+140+160 50x30+125+130 80x80+110+50 40x30+130+20}
  289. test pack-6.8 {-expand option} {
  290.     pack forget .pack.a .pack.b .pack.c .pack.d
  291.     pack .pack.a -side bottom -expand yes
  292.     pack .pack.b -side bottom
  293.     pack .pack.c .pack.d -side bottom -expand 1
  294.     update
  295.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  296.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  297. } {20x40+140+157 50x30+125+124 80x80+110+40 40x30+130+3}
  298. test pack-6.9 {-expand option} {
  299.     pack forget .pack.a .pack.b .pack.c .pack.d
  300.     pack .pack.a -side bottom -expand yes -fill both
  301.     pack .pack.b -side right
  302.     pack .pack.c -side top -expand 1 -fill both
  303.     pack .pack.d -side left
  304.     update
  305.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  306.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  307. } {300x65+0+135 50x30+250+52 250x105+0+0 40x30+0+105}
  308. test pack-6.10 {-expand option} {
  309.     pack forget .pack.a .pack.b .pack.c .pack.d
  310.     pack .pack.a -side left -expand yes -fill both
  311.     pack .pack.b -side top
  312.     pack .pack.c -side right -expand 1 -fill both
  313.     pack .pack.d -side bottom
  314.     update
  315.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  316.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  317. } {100x200+0+0 50x30+175+0 160x170+140+30 40x30+100+170}
  318. test pack-6.11 {-expand option} {
  319.     pack forget .pack.a .pack.b .pack.c .pack.d
  320.     pack .pack.a -side left -expand yes -fill both
  321.     pack .pack.b -side top -expand yes -fill both
  322.     pack .pack.c -side right -expand 1 -fill both
  323.     pack .pack.d -side bottom -expand yes -fill both
  324.     update
  325.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  326.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  327. } {100x200+0+0 200x100+100+0 160x100+140+100 40x100+100+100}
  328. catch {destroy .pack2}
  329. toplevel .pack2 -height 400 -width 400
  330. wm geometry .pack2 +0+0
  331. pack propagate .pack2 0
  332. pack forget .pack2.a .pack2.b .pack2.c .pack2.d
  333. foreach i {w1 w2 w3} {
  334.     frame .pack2.$i -width 30 -height 30 -bd 2 -relief raised
  335.     label .pack2.$i.l -text $i
  336.     place .pack2.$i.l -relwidth 1.0 -relheight 1.0
  337. }
  338. test pack-6.11 {-expand option} {
  339.     pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 -ipady 6 -expand 1 -side left
  340.     update
  341.     list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
  342. } {38x42+47+179 38x42+180+179 38x42+314+179}
  343. test pack-6.12 {-expand option} {
  344.     pack forget .pack2.w1 .pack2.w2 .pack2.w3
  345.     pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 \
  346.         -ipady 6 -expand 1 -side top
  347.     update
  348.     list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
  349. } {38x42+181+45 38x42+181+178 38x42+181+312}
  350. catch {destroy .pack2}
  351.  
  352. wm geometry .pack {}
  353. test pack-7.1 {requesting size for parent} {
  354.     pack forget .pack.a .pack.b .pack.c .pack.d
  355.     pack .pack.a .pack.b .pack.c .pack.d -side left -padx 5 -pady 10
  356.     update
  357.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  358. } {230 100}
  359. test pack-7.2 {requesting size for parent} {
  360.     pack forget .pack.a .pack.b .pack.c .pack.d
  361.     pack .pack.a .pack.b .pack.c .pack.d -side top -padx 5 -pady 10
  362.     update
  363.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  364. } {90 260}
  365. test pack-7.3 {requesting size for parent} {
  366.     pack forget .pack.a .pack.b .pack.c .pack.d
  367.     pack .pack.a .pack.b .pack.c .pack.d -side right -padx 5 -pady 10
  368.     update
  369.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  370. } {230 100}
  371. test pack-7.4 {requesting size for parent} {
  372.     pack forget .pack.a .pack.b .pack.c .pack.d
  373.     pack .pack.a .pack.b .pack.c .pack.d -side bottom -padx 5 -pady 10
  374.     update
  375.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  376. } {90 260}
  377. test pack-7.5 {requesting size for parent} {
  378.     pack forget .pack.a .pack.b .pack.c .pack.d
  379.     pack .pack.a -side top -padx 5 -pady 10
  380.     pack .pack.b -side right -padx 5 -pady 10
  381.     pack .pack.c -side bottom -padx 5 -pady 10
  382.     pack .pack.d -side left -padx 5 -pady 10
  383.     update
  384.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  385. } {150 210}
  386. test pack-7.6 {requesting size for parent} {
  387.     pack forget .pack.a .pack.b .pack.c .pack.d
  388.     pack .pack.a -side top
  389.     pack .pack.c -side left
  390.     pack .pack.d -side bottom
  391.     update
  392.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  393. } {120 120}
  394. test pack-7.7 {requesting size for parent} {
  395.     pack forget .pack.a .pack.b .pack.c .pack.d
  396.     pack .pack.a -side right
  397.     pack .pack.c -side bottom
  398.     pack .pack.d -side top
  399.     update
  400.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  401. } {100 110}
  402.  
  403.  
  404. # For the tests below, create a couple of "pad" windows to shrink
  405. # the available space for the remaining windows.  The tests have to
  406. # be done this way rather than shrinking the whole window, because
  407. # some window managers like mwm won't let a top-level window get
  408. # very small.
  409.  
  410. pack forget .pack.a .pack.b .pack.c .pack.d
  411. frame .pack.right -width 200 -height 10 -bd 2 -relief raised
  412. frame .pack.bottom -width 10 -height 150 -bd 2 -relief raised
  413. pack .pack.right -side right
  414. pack .pack.bottom -side bottom
  415. pack .pack.a .pack.b .pack.c -side top
  416. update
  417. test pack-8.1 {insufficient space} {
  418.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  419.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  420.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  421. } {20x40+30+0 1 50x30+15+40 1 80x80+0+70 1}
  422. wm geom .pack 270x250
  423. update
  424. test pack-8.2 {insufficient space} {
  425.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  426.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  427.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  428. } {20x40+25+0 1 50x30+10+40 1 70x30+0+70 1}
  429. wm geom .pack 240x220
  430. update
  431. test pack-8.3 {insufficient space} {
  432.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  433.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  434.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  435. } {20x40+10+0 1 40x30+0+40 1 70x30+0+70 0}
  436. wm geom .pack 350x350
  437. update
  438. test pack-8.4 {insufficient space} {
  439.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  440.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  441.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  442. } {20x40+65+0 1 50x30+50+40 1 80x80+35+70 1}
  443. wm geom .pack {}
  444. pack .pack.a -side left
  445. pack .pack.b -side right
  446. pack .pack.c -side left
  447. update
  448. test pack-8.5 {insufficient space} {
  449.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  450.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  451.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  452. } {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
  453. wm geom .pack 320x180
  454. update
  455. test pack-8.6 {insufficient space} {
  456.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  457.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  458.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  459. } {20x30+0+0 1 50x30+70+0 1 50x30+20+0 1}
  460. wm geom .pack 250x180
  461. update
  462. test pack-8.7 {insufficient space} {
  463.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  464.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  465.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  466. } {20x30+0+0 1 30x30+20+0 1 50x30+20+0 0}
  467. pack forget .pack.b
  468. update
  469. test pack-8.8 {insufficient space} {
  470.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  471.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  472.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  473. } {20x30+0+0 1 30x30+20+0 0 30x30+20+0 1}
  474. pack .pack.b -side right -after .pack.a
  475. wm geom .pack {}
  476. update
  477. test pack-8.9 {insufficient space} {
  478.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  479.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  480.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  481. } {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
  482. pack forget .pack.right .pack.bottom
  483.  
  484. test pack-10.1 {window ordering} {
  485.     pack forget .pack.a .pack.b .pack.c .pack.d
  486.     pack .pack.a .pack.b .pack.c .pack.d -side top
  487.     pack .pack.a -after .pack.b
  488.     pack slaves .pack
  489. } {.pack.b .pack.a .pack.c .pack.d}
  490. test pack-10.2 {window ordering} {
  491.     pack forget .pack.a .pack.b .pack.c .pack.d
  492.     pack .pack.a .pack.b .pack.c .pack.d -side top
  493.     pack .pack.a -after .pack.a
  494.     pack slaves .pack
  495. } {.pack.a .pack.b .pack.c .pack.d}
  496. test pack-10.3 {window ordering} {
  497.     pack forget .pack.a .pack.b .pack.c .pack.d
  498.     pack .pack.a .pack.b .pack.c .pack.d -side top
  499.     pack .pack.a -before .pack.d
  500.     pack slaves .pack
  501. } {.pack.b .pack.c .pack.a .pack.d}
  502. test pack-10.4 {window ordering} {
  503.     pack forget .pack.a .pack.b .pack.c .pack.d
  504.     pack .pack.a .pack.b .pack.c .pack.d -side top
  505.     pack .pack.d -before .pack.a
  506.     pack slaves .pack
  507. } {.pack.d .pack.a .pack.b .pack.c}
  508. test pack-10.5 {window ordering} {
  509.     pack forget .pack.a .pack.b .pack.c .pack.d
  510.     pack .pack.a .pack.b .pack.c .pack.d -side top
  511.     pack propagate .pack.c 0
  512.     pack .pack.a -in .pack.c
  513.     list [pack slaves .pack] [pack slaves .pack.c]
  514. } {{.pack.b .pack.c .pack.d} .pack.a}
  515. test pack-10.6 {window ordering} {
  516.     pack forget .pack.a .pack.b .pack.c .pack.d
  517.     pack .pack.a .pack.b .pack.c .pack.d -side top
  518.     pack .pack.a -in .pack
  519.     pack slaves .pack
  520. } {.pack.b .pack.c .pack.d .pack.a}
  521. test pack-10.7 {window ordering} {
  522.     pack forget .pack.a .pack.b .pack.c .pack.d
  523.     pack .pack.a .pack.b .pack.c .pack.d -side top
  524.     pack .pack.a -padx 0
  525.     pack slaves .pack
  526. } {.pack.a .pack.b .pack.c .pack.d}
  527. test pack-10.8 {window ordering} {
  528.     pack forget .pack.a .pack.b .pack.c .pack.d
  529.     pack .pack.a .pack.b .pack.c
  530.     pack .pack.d
  531.     pack slaves .pack
  532. } {.pack.a .pack.b .pack.c .pack.d}
  533. test pack-10.9 {window ordering} {
  534.     pack forget .pack.a .pack.b .pack.c .pack.d
  535.     pack .pack.a .pack.b .pack.c .pack.d
  536.     pack .pack.b .pack.d .pack.c -before .pack.a
  537.     pack slaves .pack
  538. } {.pack.b .pack.d .pack.c .pack.a}
  539. test pack-10.10 {window ordering} {
  540.     pack forget .pack.a .pack.b .pack.c .pack.d
  541.     pack .pack.a .pack.b .pack.c .pack.d
  542.     pack .pack.a .pack.c .pack.d .pack.b -after .pack.a
  543.     pack slaves .pack
  544. } {.pack.a .pack.c .pack.d .pack.b}
  545.  
  546. test pack-11.1 {retaining/clearing configuration state} {
  547.     pack forget .pack.a .pack.b .pack.c .pack.d
  548.     pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
  549.     -fill both -expand 1
  550.     pack forget .pack.a
  551.     pack .pack.a
  552.     pack info .pack.a
  553. } {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top}
  554. test pack-11.2 {retaining/clearing configuration state} {
  555.     pack forget .pack.a .pack.b .pack.c .pack.d
  556.     pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
  557.     -fill both -expand 1
  558.     pack .pack.a -pady 14
  559.     pack info .pack.a
  560. } {-in .pack -anchor n -expand 1 -fill both -ipadx 3 -ipady 4 -padx 1 -pady 14 -side bottom}
  561.  
  562. test pack-12.1 {info option} {
  563.     pack4 -in .pack
  564. } .pack
  565. test pack-12.2 {info option} {
  566.     pack4 -anchor n
  567. } n
  568. test pack-12.3 {info option} {
  569.     pack4 -anchor sw
  570. } sw
  571. test pack-12.4 {info option} {
  572.     pack4 -expand yes
  573. } 1
  574. test pack-12.5 {info option} {
  575.     pack4 -expand no
  576. } 0
  577. test pack-12.6 {info option} {
  578.     pack4 -fill x
  579. } x
  580. test pack-12.7 {info option} {
  581.     pack4 -fill y
  582. } y
  583. test pack-12.8 {info option} {
  584.     pack4 -fill both
  585. } both
  586. test pack-12.9 {info option} {
  587.     pack4 -fill none
  588. } none
  589. test pack-12.10 {info option} {
  590.     pack4 -ipadx 14
  591. } 14
  592. test pack-12.11 {info option} {
  593.     pack4 -ipady 22
  594. } 22
  595. test pack-12.12 {info option} {
  596.     pack4 -padx 2
  597. } 2
  598. test pack-12.13 {info option} {
  599.     pack4 -pady 3
  600. } 3
  601. test pack-12.14 {info option} {
  602.     pack4 -side top
  603. } top
  604. test pack-12.15 {info option} {
  605.     pack4 -side bottom
  606. } bottom
  607. test pack-12.16 {info option} {
  608.     pack4 -side left
  609. } left
  610. test pack-12.17 {info option} {
  611.     pack4 -side right
  612. } right
  613.  
  614. test pack-13.1 {command options and errors} {
  615.     list [catch {pack} msg] $msg
  616. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  617. test pack-13.2 {command options and errors} {
  618.     list [catch {pack foo} msg] $msg
  619. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  620. test pack-13.3 {command options and errors} {
  621.     list [catch {pack configure x} msg] $msg
  622. } {1 {bad argument "x": must be name of window}}
  623. test pack-13.4 {command options and errors} {
  624.     pack forget .pack.a .pack.b .pack.c .pack.d
  625.     pack configure .pack.b .pack.c
  626.     pack slaves .pack
  627. } {.pack.b .pack.c}
  628. test pack-13.5 {command options and errors} {
  629.     pack forget .pack.a .pack.b .pack.c .pack.d
  630.     list [catch {pack .foo} msg] $msg
  631. } {1 {bad window path name ".foo"}}
  632. test pack-13.6 {command options and errors} {
  633.     pack forget .pack.a .pack.b .pack.c .pack.d
  634.     list [catch {pack .pack} msg] $msg
  635. } {1 {can't pack ".pack": it's a top-level window}}
  636. test pack-13.7 {command options and errors} {
  637.     pack forget .pack.a .pack.b .pack.c .pack.d
  638.     list [catch {pack .pack.a -after .foo} msg] $msg
  639. } {1 {bad window path name ".foo"}}
  640. test pack-13.8 {command options and errors} {
  641.     pack forget .pack.a .pack.b .pack.c .pack.d
  642.     list [catch {pack .pack.a -after .pack.b} msg] $msg
  643. } {1 {window ".pack.b" isn't packed}}
  644. test pack-13.9 {command options and errors} {
  645.     pack forget .pack.a .pack.b .pack.c .pack.d
  646.     list [catch {pack .pack.a -anchor gorp} msg] $msg
  647. } {1 {bad anchor position "gorp": must be n, ne, e, se, s, sw, w, nw, or center}}
  648. test pack-13.10 {command options and errors} {
  649.     pack forget .pack.a .pack.b .pack.c .pack.d
  650.     list [catch {pack .pack.a -before gorp} msg] $msg
  651. } {1 {bad window path name "gorp"}}
  652. test pack-13.11 {command options and errors} {
  653.     pack forget .pack.a .pack.b .pack.c .pack.d
  654.     list [catch {pack .pack.a -before .pack.b} msg] $msg
  655. } {1 {window ".pack.b" isn't packed}}
  656. test pack-13.12 {command options and errors} {
  657.     pack forget .pack.a .pack.b .pack.c .pack.d
  658.     list [catch {pack .pack.a -expand "who cares?"} msg] $msg
  659. } {1 {expected boolean value but got "who cares?"}}
  660. test pack-13.13 {command options and errors} {
  661.     pack forget .pack.a .pack.b .pack.c .pack.d
  662.     list [catch {pack .pack.a -fill z} msg] $msg
  663. } {1 {bad fill style "z": must be none, x, y, or both}}
  664. test pack-13.14 {command options and errors} {
  665.     pack forget .pack.a .pack.b .pack.c .pack.d
  666.     list [catch {pack .pack.a -in z} msg] $msg
  667. } {1 {bad window path name "z"}}
  668. set pad [winfo pixels .pack 1c]
  669. test pack-13.15 {command options and errors} {
  670.     pack forget .pack.a .pack.b .pack.c .pack.d
  671.     list [catch {pack .pack.a -padx abc} msg] $msg
  672. } {1 {bad pad value "abc": must be positive screen distance}}
  673. test pack-13.16 {command options and errors} {
  674.     pack forget .pack.a .pack.b .pack.c .pack.d
  675.     list [catch {pack .pack.a -padx -1} msg] $msg
  676. } {1 {bad pad value "-1": must be positive screen distance}}
  677. test pack-13.17 {command options and errors} {
  678.     pack forget .pack.a .pack.b .pack.c .pack.d
  679.     list [catch {pack .pack.a -pady abc} msg] $msg
  680. } {1 {bad pad value "abc": must be positive screen distance}}
  681. test pack-13.18 {command options and errors} {
  682.     pack forget .pack.a .pack.b .pack.c .pack.d
  683.     list [catch {pack .pack.a -pady -1} msg] $msg
  684. } {1 {bad pad value "-1": must be positive screen distance}}
  685. test pack-13.19 {command options and errors} {
  686.     pack forget .pack.a .pack.b .pack.c .pack.d
  687.     list [catch {pack .pack.a -ipadx abc} msg] $msg
  688. } {1 {bad pad value "abc": must be positive screen distance}}
  689. test pack-13.20 {command options and errors} {
  690.     pack forget .pack.a .pack.b .pack.c .pack.d
  691.     list [catch {pack .pack.a -ipadx -1} msg] $msg
  692. } {1 {bad pad value "-1": must be positive screen distance}}
  693. test pack-13.21 {command options and errors} {
  694.     pack forget .pack.a .pack.b .pack.c .pack.d
  695.     list [catch {pack .pack.a -ipady abc} msg] $msg
  696. } {1 {bad pad value "abc": must be positive screen distance}}
  697. test pack-13.22 {command options and errors} {
  698.     pack forget .pack.a .pack.b .pack.c .pack.d
  699.     list [catch {pack .pack.a -ipady -1} msg] $msg
  700. } {1 {bad pad value "-1": must be positive screen distance}}
  701. test pack-13.23 {command options and errors} {
  702.     pack forget .pack.a .pack.b .pack.c .pack.d
  703.     list [catch {pack .pack.a -side bac} msg] $msg
  704. } {1 {bad side "bac": must be top, bottom, left, or right}}
  705. test pack-13.24 {command options and errors} {
  706.     pack forget .pack.a .pack.b .pack.c .pack.d
  707.     list [catch {pack .pack.a -lousy bac} msg] $msg
  708. } {1 {unknown or ambiguous option "-lousy": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
  709. test pack-13.25 {command options and errors} {
  710.     pack forget .pack.a .pack.b .pack.c .pack.d
  711.     list [catch {pack .pack.a -padx} msg] $msg
  712. } {1 {extra option "-padx" (option with no value?)}}
  713. test pack-13.26 {command options and errors} {
  714.     pack forget .pack.a .pack.b .pack.c .pack.d
  715.     list [catch {pack .pack.a {} 22} msg] $msg
  716. } {1 {unknown or ambiguous option "": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
  717. test pack-13.27 {command options and errors} {
  718.     pack forget .pack.a .pack.b .pack.c .pack.d
  719.     list [catch {pack .pack.a -in .} msg] $msg
  720. } {1 {can't pack .pack.a inside .}}
  721. test pack-13.28 {command options and errors} {
  722.     pack forget .pack.a .pack.b .pack.c .pack.d
  723.     frame .pack.a.a
  724.     list [catch {pack .pack.a.a -in .pack.b} msg] $msg
  725. } {1 {can't pack .pack.a.a inside .pack.b}}
  726. test pack-13.29 {command options and errors} {
  727.     pack forget .pack.a .pack.b .pack.c .pack.d
  728.     pack .pack.a .pack.b .pack.c .pack.d
  729.     pack forget .pack.a .pack.d
  730.     pack slaves .pack
  731. } {.pack.b .pack.c}
  732. test pack-13.30 {command options and errors} {
  733.     pack forget .pack.a .pack.b .pack.c .pack.d
  734.     .pack configure -width 300 -height 200
  735.     pack propagate .pack 0
  736.     pack .pack.a
  737.     update
  738.     set result [list [winfo reqwidth .pack] [winfo reqheight .pack]]
  739.     pack propagate .pack 1
  740.     update
  741.     lappend result [winfo reqwidth .pack] [winfo reqheight .pack]
  742.     set result
  743. } {300 200 20 40}
  744. test pack-13.31 {command options and errors} {
  745.     set result [pack propagate .pack.d]
  746.     pack propagate .pack.d 0
  747.     lappend result [pack propagate .pack.d]
  748.     pack propagate .pack.d 1
  749.     lappend result [pack propagate .pack.d]
  750.     set result
  751. } {1 0 1}
  752. test pack-13.32 {command options and errors} {
  753.     pack forget .pack.a .pack.b .pack.c .pack.d
  754.     list [catch {pack propagate .dum} msg] $msg
  755. } {1 {bad window path name ".dum"}}
  756. test pack-13.33 {command options and errors} {
  757.     pack forget .pack.a .pack.b .pack.c .pack.d
  758.     list [catch {pack propagate .pack foo} msg] $msg
  759. } {1 {expected boolean value but got "foo"}}
  760. test pack-13.34 {command options and errors} {
  761.     pack forget .pack.a .pack.b .pack.c .pack.d
  762.     list [catch {pack propagate .pack foo bar} msg] $msg
  763. } {1 {wrong # args: should be "pack propagate window ?boolean?"}}
  764. test pack-13.35 {command options and errors} {
  765.     pack forget .pack.a .pack.b .pack.c .pack.d
  766.     list [catch {pack slaves} msg] $msg
  767. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  768. test pack-13.36 {command options and errors} {
  769.     pack forget .pack.a .pack.b .pack.c .pack.d
  770.     list [catch {pack slaves a b} msg] $msg
  771. } {1 {wrong # args: should be "pack slaves window"}}
  772. test pack-13.37 {command options and errors} {
  773.     pack forget .pack.a .pack.b .pack.c .pack.d
  774.     list [catch {pack slaves .x} msg] $msg
  775. } {1 {bad window path name ".x"}}
  776. test pack-13.38 {command options and errors} {
  777.     pack forget .pack.a .pack.b .pack.c .pack.d
  778.     list [catch {pack slaves .pack.a} msg] $msg
  779. } {0 {}}
  780. test pack-13.39 {command options and errors} {
  781.     pack forget .pack.a .pack.b .pack.c .pack.d
  782.     list [catch {pack lousy .pack} msg] $msg
  783. } {1 {bad option "lousy":  must be configure, forget, info, propagate, or slaves}}
  784.  
  785. pack .pack.right -side right
  786. pack .pack.bottom -side bottom
  787. test pack-14.1 {window deletion} {
  788.     pack forget .pack.a .pack.b .pack.c .pack.d
  789.     pack .pack.a .pack.d .pack.b .pack.c -side top
  790.     update
  791.     destroy .pack.d
  792.     update
  793.     set result [list [pack slaves .pack] [winfo geometry .pack.a] \
  794.         [winfo geometry .pack.b] [winfo geometry .pack.c]]
  795. } {{.pack.right .pack.bottom .pack.a .pack.b .pack.c} 20x40+30+0 50x30+15+40 80x80+0+70}
  796.  
  797. test pack-15.1 {respond to changes in expansion} {
  798.     pack forget .pack.a .pack.b .pack.c .pack.d
  799.     wm geom .pack {}
  800.     pack .pack.a
  801.     update
  802.     set result [winfo geom .pack.a]
  803.     wm geom .pack 400x300
  804.     update
  805.     lappend result [winfo geom .pack.a]
  806.     pack .pack.a -expand true -fill both
  807.     update
  808.     lappend result [winfo geom .pack.a]
  809. } {20x40+0+0 20x40+90+0 200x150+0+0}
  810. wm geom .pack {}
  811.  
  812. test pack-16.1 {managing geometry with -in option} {
  813.     pack forget .pack.a .pack.b .pack.c .pack.d
  814.     pack .pack.a -side top
  815.     frame .pack.f
  816.     lower .pack.f
  817.     pack .pack.f -side top
  818.     frame .pack.f.f2
  819.     lower .pack.f.f2
  820.     pack .pack.f.f2 -side top
  821.     pack .pack.b -in .pack.f.f2
  822.     update
  823.     set result [winfo geom .pack.b]
  824.     pack unpack .pack.a
  825.     update
  826.     lappend result [winfo geom .pack.b]
  827. } {50x30+0+40 50x30+0+0}
  828. catch {destroy .pack.f}
  829. test pack-16.2 {managing geometry with -in option} {
  830.     pack forget .pack.a .pack.b .pack.c .pack.d
  831.     frame .pack.f
  832.     lower .pack.f
  833.     pack .pack.a -in .pack.f -side top
  834.     update
  835.     set result [winfo ismapped .pack.a]
  836.     place .pack.f -x 30 -y 45
  837.     update
  838.     lappend result [winfo ismapped .pack.a] [winfo geometry .pack.a]
  839.     place forget .pack.f
  840.     update
  841.     lappend result [winfo ismapped .pack.a]
  842. } {0 1 20x40+30+45 0}
  843. catch {destroy .pack.f}
  844. test pack-16.3 {managing geometry with -in option} {
  845.     pack forget .pack.a .pack.b .pack.c .pack.d
  846.     pack .pack.a -side top
  847.     frame .pack.f
  848.     lower .pack.f
  849.     pack .pack.f -side top
  850.     frame .pack.f.f2
  851.     lower .pack.f.f2
  852.     pack .pack.f.f2 -side top
  853.     pack .pack.b -in .pack.f.f2
  854.     update
  855.     set result [winfo ismapped .pack.b]
  856.     pack unpack .pack.f
  857.     update
  858.     lappend result [winfo ismapped .pack.b]
  859. } {1 0}
  860. catch {destroy .pack.f}
  861. test pack-16.4 {managing geometry with -in option} {
  862.     pack forget .pack.a .pack.b .pack.c .pack.d
  863.     foreach i {1 2} {
  864.     frame .pack.f$i -width 100 -height 40 -bd 2 -relief raised
  865.     lower .pack.f$i
  866.     pack propagate .pack.f$i 0
  867.     pack .pack.f$i -side top
  868.     }
  869.     pack .pack.b -in .pack.f1 -side right
  870.     update
  871.     set result {}
  872.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  873.     pack .pack.b -in .pack.f2 -side bottom
  874.     update
  875.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  876.     .pack.f1 configure -width 50 -height 20
  877.     update
  878.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  879.     pack forget .pack.b
  880.     update
  881.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  882. } {50x30+48+5 1 50x30+25+48 1 50x30+25+28 1 50x30+25+28 0}
  883. catch {destroy .pack.f1 .pack.f2}
  884. test pack-16.5 {managing geometry with -in option} {
  885.     pack forget .pack.a .pack.b .pack.c .pack.d
  886.     foreach i {1 2} {
  887.     frame .pack.f$i -width 100 -height 20 -bd 2 -relief raised
  888.     lower .pack.f$i
  889.     pack propagate .pack.f$i 0
  890.     pack .pack.f$i -side top
  891.     }
  892.     pack .pack.b -in .pack.f2 -side top
  893.     update
  894.     set result {}
  895.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  896.     pack .pack.a -before .pack.b -side top
  897.     update
  898.     lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
  899. } {50x16+25+22 1 50x16+25+22 0}
  900. catch {destroy .pack.f1 .pack.f2}
  901.  
  902. test pack-17.1 {geometry manager name} {
  903.     pack forget .pack.a .pack.b .pack.c .pack.d
  904.     set result {}
  905.     lappend result [winfo manager .pack.a]
  906.     pack .pack.a
  907.     lappend result [winfo manager .pack.a]
  908.     pack forget .pack.a
  909.     lappend result [winfo manager .pack.a]
  910. } {{} pack {}}
  911.  
  912. test pack-18.1 {PackLostSlaveProc procedure} {
  913.     pack forget .pack.a .pack.b .pack.c .pack.d
  914.     pack .pack.a
  915.     update
  916.     place .pack.a -x 40 -y 10
  917.     update
  918.     list [winfo manager .pack.a] [winfo geometry .pack.a] \
  919.     [catch {pack info .pack.a} msg] $msg
  920. } {place 20x40+40+10 1 {window ".pack.a" isn't packed}}
  921.  
  922. # destroy .pack
  923. foreach i {pack1 pack2 pack3 pack4} {
  924.     rename $i {}
  925. }
  926.